package cn.kgc.runner;

import cn.kgc.base.BaseInfoProperties;
import cn.kgc.base.SystemConstant;
import cn.kgc.entity.Industry;
import cn.kgc.service.IndustryService;
import org.redisson.api.RBloomFilter;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author YC
 * 当 Spring 容器初始化完成，所有 Bean 都已加载并就绪后，Spring 会自动调用所有实现了CommandLineRunner接口的 Bean 的run()方法
 * 此类用于Redis缓存预热
 */
@Component
public class CachePreheatRunner extends BaseInfoProperties implements CommandLineRunner {

    @Resource
    private IndustryService industryService;
    @Resource
    private RBloomFilter<String> industryBloomFiller;

    @Override
    public void run(String... args) throws Exception {
        // 将所有一级行业分类信息 保存到缓存中
        List<Industry> topIndustry = industryService.getTopIndustry();
        redisUtil.set(SystemConstant.INDUSTRY_TOP_PREFIX, topIndustry);
        // 将一级行业信息下的三级行业信息 保存到缓存中
        for (Industry industry : topIndustry) {
            List<Industry> thirdIndustry = industryService.getThirdIndustry(industry.getId());
            redisUtil.set(SystemConstant.INDUSTRY_THIRD_PREFIX + industry.getId(), thirdIndustry);
            // 将一级行业信息保存到布隆过滤器中
            industryBloomFiller.add(industry.getId());
        }
    }

}
